home *** CD-ROM | disk | FTP | other *** search
/ Software 2000 / Software 2000 Volume 1 (Disc 1 of 2).iso / aga / aga167.dms / in.adf / AGA-SOURCECODE / AGA.256.Fade.s < prev    next >
Encoding:
Text File  |  1994-03-01  |  5.5 KB  |  382 lines

  1.     section Code,Code_c
  2.  
  3.  
  4. ; Right Mouse Button To Fade In / Out
  5.  
  6.     include    df0:aga-sourcecode/HardwareEquates
  7.  
  8. start    bsr    make.copper.lists
  9.  
  10.  
  11.     move.l    4.w,a6
  12.     jsr    -132(a6)        turn off multitasking
  13.  
  14.  
  15.     lea    $dff000,a6
  16.     move.w    intenar(a6),ints    save system interrupt status
  17.     move.w    #$3fef,intena(a6)
  18.     move.w    #$c010,intena(a6)    enable copper interrupt
  19.  
  20.  
  21. vpwait    move.l    vposr(a6),d0        get vertical beam position
  22.     and.l    #$1ff00,d0
  23.     lsr.l    #8,d0
  24.     cmp.w    #312,d0            wait for bottom line
  25.     bne.s    vpwait            before disabling sprite DMA
  26.  
  27.  
  28.     move.w    #$03ff,dmacon(a6)    DMA off
  29.  
  30.  
  31.     move.l    $14.w,olddbz        division-by-zero exception handler
  32.     move.l    #rteins,$14.w        set to rte instruction
  33.  
  34.  
  35. *
  36. * SET SCREEN SIZE ETC
  37. *
  38.     move.w    #$0210,bplcon0(a6)    initialise screen
  39.     move.w    #$2c81,diwstrt(a6)
  40.     move.w    #$2cc1,diwstop(a6)
  41.     move.w    #$38,ddfstrt(a6)
  42.     move.w    #$d8,ddfstop(a6)
  43.     move.w    #$24,bplcon2(a6)
  44.     move.w    #40*7-8,bpl1mod(a6)
  45.     move.w    #40*7-8,bpl2mod(a6)
  46.  
  47. *
  48. * SET THE NEW COPPER LOCATION
  49. *
  50.     move.l    4.w,a6
  51.     lea    grafname(pc),a1
  52.     moveq    #0,d0
  53.     jsr    -552(a6)        openlibrary
  54.     tst.l    d0
  55.     beq    end
  56.     move.l    d0,gfxbase
  57.     move.l    d0,a6
  58.     jsr    -456(a6)        ownblitter
  59.  
  60.     move.l    gfxbase(pc),a1
  61.     move.l    38(a1),oldcopper
  62.  
  63.     lea    $dff000,a6
  64.  
  65.     bsr    Set.Colours
  66.  
  67.     move.l    copper1(pc),cop1lch(a6)
  68.     move.w    d0,copjmp1(a6)
  69.     move.w    #$83c0,dmacon(a6)    DMA on (bitplane, copper, blitter)
  70.  
  71.  
  72.  
  73. *
  74. * INITIALISE LEVEL 3 INTERRUPT
  75. *
  76.  
  77.     move.l    $6c.w,old
  78.     move.l    #level3,$6c.w
  79.  
  80.  
  81. *****************************************
  82. *        MAIN LOOP        *
  83. *****************************************
  84.  
  85.  
  86. loop
  87.     clr.w    nextframe
  88. wait    tst.w    nextframe
  89.     beq.s    wait
  90.  
  91.     tst.b    Fade.Direction
  92.     beq.s    No.do.Fade
  93.  
  94.     bsr    Fade
  95.     bsr    Set.Colours
  96.     bra.s    Check.Quit
  97.  
  98. No.do.Fade
  99.  
  100.     btst    #2,potgor(a6)
  101.     bne.s    Check.Quit
  102.  
  103.     move.b    Fade.Direction.Copy(pc),d0
  104.     not.b    d0
  105.     move.b    d0,Fade.Direction
  106.     move.b    d0,Fade.Direction.Copy
  107.  
  108. Check.Quit
  109.     btst    #6,$bfe001
  110.     bne.s    loop
  111.  
  112.  
  113.  
  114. *
  115. * EXIT ROUTINE
  116. *
  117.  
  118.  
  119. wait.2    btst    #6,dmaconr(a6)        wait for blitter to finish
  120.     bne.s    wait.2
  121.  
  122.     move.l    old(pc),$6c.w
  123.  
  124.     move.l    oldcopper(pc),cop1lch(a6)
  125.  
  126.     move.w    #$8030,dmacon(a6)    DMA on (sprite, disk)
  127.     move.w    ints(pc),d0
  128.     ori.w    #$c000,d0        set SET and INTEN bits
  129.     move.w    d0,intena(a6)        restore system interrupt status
  130.  
  131.     move.l    olddbz(pc),$14.w       restore d-b-z exception handler
  132.  
  133.     move.l    gfxbase(pc),a6
  134.     jsr    -462(a6)        disownblitter
  135.     move.l    gfxbase(pc),a1
  136.     move.l    4.w,a6
  137.     jsr    -414(a6)        closelibrary
  138.  
  139. end    move.l    4.w,a6
  140.     jsr    -138(a6)        turn on multitasking
  141.  
  142.     moveq    #0,d0
  143.     rts
  144.  
  145.  
  146.  
  147. *********************
  148. * LEVEL 3 INTERRUPT *
  149. *********************
  150.  
  151.  
  152. level3
  153.     move.w    #$10,intreq(a6)
  154.     move.w    #1,nextframe
  155. rteins    rte
  156.  
  157.  
  158. *****************************************************
  159.  
  160.  
  161. Fade
  162.     lea    ColourTable(pc),a1
  163.     lea    ColTab1a(pc),a3
  164.     lea    ColTab1b(pc),a4
  165.  
  166.     tst.b    Fade.Direction
  167.     bpl.s    Fade.Up
  168.     bmi.s    Fade.Down
  169.     beq.s    Fade.Stop
  170.  
  171. Fade.Up
  172.     addq.w    #4,Fade.Value
  173.  
  174.     cmp.w    #257,Fade.Value
  175.     blt.s    Fade.Now
  176.  
  177.     move.w    #256,Fade.Value
  178.     bra.s    Fade.Stop
  179.  
  180. Fade.Down
  181.     subq.w    #4,Fade.Value
  182.     bge.s    Fade.Now
  183.  
  184. Fade.Stop
  185.     sf    Fade.Direction
  186.     st    Fade.Finished
  187.     rts
  188.  
  189. Fade.Now
  190.     move.w    Fade.Value,d0
  191.     move.w    #256-1,d1
  192.  
  193. Fade.Loop
  194.     moveq    #0,d2
  195.     moveq    #0,d3
  196.     moveq    #0,d4
  197.     move.b    (a1)+,d2
  198.     move.b    (a1)+,d3
  199.     move.b    (a1)+,d4
  200.  
  201.     mulu    d0,d2
  202.     mulu    d0,d3
  203.     mulu    d0,d4
  204.  
  205.     lsr.w    #8,d2
  206.     lsr.w    #8,d3
  207.     lsr.w    #8,d4
  208. ****
  209.     move.w    d2,d5            Get red value for both words
  210.  
  211.     and.w    #$f0,d2
  212.     and.w    #$0f,d5
  213.  
  214.     lsl.w    #4,d2
  215.     lsl.w    #8,d5
  216.  
  217.     move.w    d2,TempCoarseColour
  218.     move.w    d5,TempFineColour
  219. ****
  220.     move.w    d3,d5            get green value for both words
  221.  
  222.     and.w    #$f0,d3
  223.     and.w    #$0f,d5
  224.  
  225.     lsl.w    #4,d5
  226.  
  227.     or.w    d3,TempCoarseColour
  228.     or.w    d5,TempFineColour
  229. ****
  230.     move.w    d4,d5            get blue value for both words
  231.  
  232.     and.w    #$f0,d4
  233.     and.w    #$0f,d5
  234.  
  235.     lsr.w    #4,d4
  236.  
  237.     or.w    d4,TempCoarseColour
  238.     or.w    d5,TempFineColour
  239.  
  240.     move.w    TempCoarseColour,(a3)+
  241.     move.w    TempFineColour,(a4)+
  242.  
  243.     dbra    d1,Fade.Loop
  244.  
  245.     rts
  246.  
  247.  
  248. Fade.Direction        dc.b    1
  249. Fade.Direction.Copy    dc.b    1
  250. Fade.Finished        dc.b    0
  251.     even
  252. Fade.Value        dc.w    0
  253. TempCoarseColour    dc.w    0
  254. TempFineColour        dc.w    0
  255.  
  256.  
  257. *****************************************************
  258.  
  259.  
  260. Set.Colours
  261.     lea    ColTab1a(pc),a0
  262.     lea    ColTab1b(pc),a1
  263.     move.w    #$0c40,d1
  264.     moveq    #8-1,d7
  265.  
  266. NextBank.C40
  267.     move.w    d1,$106(a6)
  268.     lea    $dff180,a2
  269.     moveq    #16-1,d2
  270.  
  271. Next.Colour.C40
  272.     move.l    (a0)+,(a2)+
  273.     dbra    d2,Next.Colour.C40
  274.  
  275.     add.w    #$2000,d1
  276.     dbra    d7,NextBank.C40
  277.  
  278.     move.w    #$0e40,d1
  279.     moveq    #8-1,d7
  280.  
  281. NextBank.E40
  282.     move.w    d1,$106(a6)
  283.     lea    $dff180,a2
  284.     moveq    #16-1,d2
  285.  
  286. Next.Colour.E40
  287.     move.l    (a1)+,(a2)+
  288.     dbra    d2,Next.Colour.E40
  289.  
  290.     add.w    #$2000,d1
  291.     dbra    d7,NextBank.E40
  292.  
  293.     rts
  294.  
  295. *****************************************************
  296. *
  297. *
  298.  
  299. make.copper.lists
  300.     move.l    #Graphic,d0
  301.     add.l    #(256*2)*2,d0        256 colours most/least significant
  302.     move.l    #Bit.Screen,a0
  303.  
  304. init.copper
  305.     moveq    #8-1,d1
  306. next.plane
  307.     move.w    d0,6(a0)        save low word
  308.     swap    d0
  309.     move.w    d0,2(a0)        save high word
  310.     swap    d0
  311.     add.l    #40,d0            next bitplane
  312.     addq.w    #8,a0            update pointer to copper list
  313.     dbra    d1,next.plane
  314.  
  315.     rts
  316.  
  317.  
  318.  
  319. ;""""""""""""""""""""""""""""""""""""""""
  320. ;    " THE COPPER LIST "
  321. ;    "                 "
  322. ;    """""""""""""""""""
  323.  
  324. copper.list.1
  325.     dc.w    $180,0
  326.     dc.w    $1fc,3
  327.  
  328. Bit.Screen
  329.     dc.w    bpl1pth            8 bitplane display
  330.     dc.w    0,bpl1ptl
  331.     dc.w    0,bpl2pth
  332.     dc.w    0,bpl2ptl
  333.     dc.w    0,bpl3pth
  334.     dc.w    0,bpl3ptl
  335.     dc.w    0,bpl4pth
  336.     dc.w    0,bpl4ptl
  337.     dc.w    0,bpl5pth
  338.     dc.w    0,bpl5ptl
  339.     dc.w    0,bpl6pth
  340.     dc.w    0,bpl6ptl
  341.     dc.w    0,bpl7pth
  342.     dc.w    0,bpl7ptl
  343.     dc.w    0,bpl8pth
  344.     dc.w    0,bpl8ptl
  345.     dc.w    0
  346.  
  347.  
  348.     dc.w    $ff01,$fffe
  349.  
  350.     dc.w    intreq,$8010
  351.  
  352.     dc.w    $ffff,$fffe        END
  353.  
  354.  
  355.  
  356. *************
  357. * VARIABLES *
  358. *************
  359.  
  360. copper1        dc.l    copper.list.1
  361.  
  362. olddbz        dc.l    0
  363. oldcopper    dc.l    0
  364. gfxbase        dc.l    0
  365. ints        dc.w    0
  366. old        dc.l    0
  367. nextframe    dc.w    0
  368. Delay        dc.w    50*5
  369.  
  370. grafname    dc.b    'graphics.library',0
  371.         even
  372.  
  373. ColTab1a    ds.w    256*2
  374. ColTab1b    ds.w    256*2
  375.  
  376. ColourTable    incbin    binary/tut.colours
  377.  
  378.     section    data,data_c
  379.  
  380. Graphic    incbin    binary/tut
  381.  
  382.